package com.jingdianjichi.wx.mapper;

import com.jingdianjichi.wx.entity.PendingQuestion;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 待处理问题数据访问接口
 * 该接口用于与数据库交互，处理待回答问题的相关操作
 */
@Mapper
public interface PendingQuestionMapper {

    /**
     * 插入一条待处理问题记录
     * @param userOpenId 用户的开放ID
     * @param msgId 消息ID
     * @param questionText 问题文本内容
     * @param questionKey 问题唯一标识键
     * @param expireAt 过期时间
     * @return 插入成功的记录数
     */
    int insertPending(@Param("userOpenId") String userOpenId,
                      @Param("msgId") String msgId,
                      @Param("questionText") String questionText,
                      @Param("questionKey") String questionKey,
                      @Param("expireAt") Date expireAt);

    /**
     * 标记问题为处理中状态
     * @param id 待处理问题的ID
     * @return 更新成功的记录数
     */
    int markProcessing(@Param("id") Long id);

    /**
     * 保存问题的答案
     * @param id 待处理问题的ID
     * @param answerText 答案文本内容
     * @param model 生成答案所使用的模型
     * @return 更新成功的记录数
     */
    int saveAnswer(@Param("id") Long id,
                   @Param("answerText") String answerText,
                   @Param("model") String model);

    /**
     * 标记问题处理失败
     * @param id 待处理问题的ID
     * @param error 错误信息
     * @return 更新成功的记录数
     */
    int markFailed(@Param("id") Long id,
                   @Param("error") String error);

    /**
     * 批量获取待处理的问题
     * @param limit 获取的问题数量限制
     * @return 待处理问题列表
     */
    List<PendingQuestion> pickBatch(@Param("limit") int limit);

    /**
     * 根据问题键查找最近已回答的问题
     * @param questionKey 问题唯一标识键
     * @return 最近已回答的问题记录
     */
    PendingQuestion findLatestAnsweredByKey(@Param("questionKey") String questionKey);
}
